import { fileApi } from "@/api/file";
import type { FileResponseReq } from "@/types";

/**
 * 生成随机密钥
 * 该函数生成一个包含大写字母、小写字母、数字和特殊字符的随机密钥
 * 密钥的长度是随机的，在8到20个字符之间
 * 保证密钥中至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符
 *
 * @returns {string} 生成的随机密钥
 */
export function generateRandomKey() {
  // 大写字母
  const uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  // 小写字母
  const lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
  // 数字
  const numbers = "0123456789";
  // 特殊字符
  const specialCharacters = "!@#$%^&*()_+~`|}{[]\\:;?><,./-=";
  const allCharacters = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
  // 生成8到20之间的随机长度
  const length = Math.floor(Math.random() * (20 - 8 + 1)) + 8;
  let randomKey = "";
  // 添加至少一个大写字母
  randomKey += uppercaseLetters[Math.floor(Math.random() * uppercaseLetters.length)];
  // 添加至少一个小写字母
  randomKey += lowercaseLetters[Math.floor(Math.random() * lowercaseLetters.length)];
  // 添加至少一个数字
  randomKey += numbers[Math.floor(Math.random() * numbers.length)];
  // 添加至少一个特殊字符
  randomKey += specialCharacters[Math.floor(Math.random() * specialCharacters.length)];
  // 生成余下的随机字符
  for (let i = 0; i < length - 4; i++) {
    const randomIndex = Math.floor(Math.random() * allCharacters.length);
    randomKey += allCharacters[randomIndex];
  }
  // 对随机密钥进行随机排序
  randomKey = randomKey
    .split("")
    .sort(() => Math.random() - 0.5)
    .join("");
  return randomKey;
}

/**
 * 预览附件
 * @param {FileResponseReq} row - 附件实体
 */
export function handlePreview(row: FileResponseReq) {
  console.log(row);
  return window.open(fileApi.fileUrl(row.filePath));
}
